Profilers are software development tools that measure aspects of software program behavior. Familiar profilers are used to collect and/or analyze data to help answer questions such as which routines of a program are using the most processor cycles, which routines are using the most memory, and whether all of the memory allocated by the program is also being freed after it is no longer needed for useful work in the program. Profilers are often used to help improve program performance.
The program behavior data which is collected for profiling may include stack traces, other recorded events, program variable values at one or more points in time, operating system and/or other runtime environment state at one or more points in time, and statistics summarizing such data, for example. Data may be collected directly by the profiler, or it may be collected by another tool and then fed to the profiler for analysis and display. Program behavior data for profiling may be collected by using hardware interrupts, code instrumentation, processor or runtime simulation or emulation, operating system hooks, performance counters, and/or logging tools, for example.